<?php

// =================================================
// =================================================

\vendor\laravel\framework\src\Illuminate\Container\Container.php

// 绑定
    // 直接绑定一个对象；目前理解都是单例的；
    $app->instance($abstract, $instance), 
        $this->instances[$abstract] = $instance;

    // 绑定具体实现，但还没有实例化；都在 $app->bindings 数组内；
    $app->bind($abstract, $concrete = null, $shared = false), 
        $this->bindings[$abstract] = compact('concrete', 'shared');

    $app->singleton($abstract, $concrete = null)
        $this->bind($abstract, $concrete, true);


// 实例化
    $app->make($abstract, array $parameters = [])
        // 首先从 aliases 中取别名，就是value；
        // 然后，如果 instances 中有这个别名为key 的键值对，直接返回值 -- 也就是实例；
        // 如果没用，则获取实现：$concrete = $this->getConcrete($abstract);
        // 最终依靠 build($concrete, $parameters) 得到实例；
        // 如果该 $abstract 是 shared，则 $this->instances[$abstract] = $object;
    $app->build($concrete, array $parameters = [])
        // 直接反射构造，没有 instances 的关系；

// =================================================
// =================================================

\vendor\laravel\framework\src\Illuminate\Foundation\Application.php

$app->make($abstract, array $parameters = [])
    // 首先找 aliases 中的别名，就是 key 为 $abstract 的 value 值。
    // 然后看 $app->deferredServices 数组中是否有 key 为 $abstract 的，有则执行 $this->loadDeferredProvider($abstract);
    // 不管有没有，继续执行，调用父类的 make：return parent::make($abstract, $parameters);

$app->bound($abstract)
    return isset($this->deferredServices[$abstract]) || parent::bound($abstract);

// =================================================
// =================================================


// =================================================
// =================================================


// =================================================
// =================================================



// =================================================
// =================================================

// =================================================
// =================================================